//classe para conectar com MySQL.
//Criado por Allan Kardec
package br.com.zumbits.avd.mysql;

import br.com.zumbits.avd.Config;
import br.com.zumbits.avd.storage.Storage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;

public class Mysql {

    /**
     * Constantes
     */
    public static final String LOCALHOST = "localhost/";
    public static final String JDBCMYSQL = "jdbc:mysql://";
    /**
     * Vari�veis privadas
     */
    // Usu�rio de acesso ao banco
    private String user;
    // Senha de acesso ao banco
    private String passwd;
    // Base de dados de acesso ao banco
    private String dataBase;
    // URL para acesso ao banco
    private String url;
    // Host para acesso ao banco
    private String host;
    // "Ponte de conexão" com o banco
    private Connection conn;
    //
    private boolean connected;

    public Mysql() {
        this.connected = false;

        List<String> list = Config.getDataBaseMysql();

        this.host = list.get(0);
        this.dataBase = list.get(1);
        this.user = list.get(2);
        this.passwd = list.get(3);

        this.url = JDBCMYSQL
                + this.host
                + this.dataBase
                + "?user=" + this.user
                + "&password=" + this.passwd;
    }

    public Mysql(String dataBase, String user, String passwd) {
        this(LOCALHOST, dataBase, user, passwd);
    }

    /**
     * Construtor
     *
     * @param dataBase - base de dados
     * @param user - usuário de acesso ao banco
     * @param passwd - senha de acesso ao banco
     */
    public Mysql(String host, String dataBase, String user, String passwd) {
        this.host = host;
        this.dataBase = dataBase;
        this.user = user;
        this.passwd = passwd;
        this.connected = false;

        this.url = JDBCMYSQL
                + this.host
                + this.dataBase
                + "?user=" + this.user
                + "&password=" + this.passwd;
    }

    /**
     * Retorna a conex�o com o banco
     * @return retorna a conex�o com o banco
     */
    public Connection getConnection() {
        return conn;
    }

    /**
     * Estabelece um conex�o com o banco
     */
    public boolean connect() {
        try {
            System.out.println("Iniciando conexão com o banco de dados...");

            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(this.url);

            System.out.println("Conectado!!!");

            this.connected = true;
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(Mysql.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Mysql.class.getName()).log(Level.SEVERE, null, ex);
        }

        this.connected = false;
        return false;
    }

    /**
     * Disconecta do banco
     */
    public boolean disconnect() {
        System.out.println("Fechando a conexão...");

        try {
            conn.close();
            System.out.println("Desconectado!!!");

            connected = false;

            return true;
        } catch (SQLException ex) {
            Logger.getLogger(Mysql.class.getName()).log(Level.SEVERE, null, ex);
        }

        connected = true;

        return false;
    }

    public boolean isConnected() {
        return this.connected;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getDataBase() {
        return dataBase;
    }

    public void setDataBase(String dataBase) {
        this.dataBase = dataBase;
    }
}
